JOANNEUMHomeForschungsbereicheNeuSite MapRESEARCH      englishsuchenHilfe

vorheriges Kapitel Inhalt Hilfe Beispiele laden nächstes Kapitel

Daten filtern mit dem "Autofilter"

Der Autofilter, erreichbar über das Menü "Daten" und den Befehl "Filter", bietet eine sehr bequeme Möglichkeit zum Eingrenzen von Listen je nach dem Inhalt einzelner Zellspalten der Liste. Der Autofilter kann jedoch auch mit VBA gesteuert werden. Die dafür vorhandenen Eigenschaften und Methoden sind:

Eigenschaft/Methode bewirkt/ergibt Hinweis
<Range-Objekt>.Autofilter kein Autofilter eingerichtet: richtet einen Autofilter für alle umliegenden beschriebenen Zellen ein.
Autofilter vorhanden: löscht einen vorhandenen Autofilter.
Pro Tabellenblatt ist nur ein Autofilter möglich.
<Worksheet-Objekt>.AutoFilterMode Gibt "True" zurück, wenn im Blatt die Dorpdown-Pfeile für einen Autofilter angezeigt werden.
<Worksheet-Objekt>.FilterMode Gibt "True" zurück, wenn im Blatt ein Autofilter eingerichtet wurde und es ausgefilterte Zeilen gibt.
Gibt "False" zurück, wenn im Tabellenblatt kein AutoFilter eingerichtet ist oder in der zu filternden Liste alle Zeilen eingeblendet sind.
<Worksheet-Objekt>.ShowAllData Blendet alle Zeilen für die momentan gefilterte Liste ein. Versuch, diese Methode auf eine gar nicht gefilterte Liste anzuwenden, führt zu einer Fehlermeldung

Die Methode "Autofilter"

"Autofilter" ist ein Schalter: Es richtet einen Autofilter ein, wenn es auf dem Blatt keinen gibt, und falls es einen gibt, schaltet es ihn aus. "Autofilter" führt zu einer Fehlermeldung, falls der Cursor in einer Zelle steht, die leer ist. Der Autofilter wird übrigens nicht in der Zelle eingerichtet, in der der Cursor steht. EXCEL sucht alle um diese Zelle liegenden beschriebenen Zellen ab und setzt die Filter-Pfeile dann in der obersten Zeile des Bereichs.


Abbildung 29:
Die "Autofilter"-Methode ist intelligent. Sie findet von selbst die oberste Zeile eines Listenbereiches und stellt dorthin die "Autofilter"-Symbole

Sub AutofilterToggle()

' Autofilter gibt's nur in Tabellenblättern:
If TypeName(ActiveSheet) <> "Worksheet" Then
  Beep
  Exit Sub
' Falls kein Autofilter gesetzt ist, muß die aktive Zelle
' einen Wert haben, damit ein Autofilter gesetzt werden kann:
ElseIf ActiveSheet.AutoFilterMode = False And IsEmpty(ActiveCell) Then
  MsgBox "Autofilter kann nicht in einer leeren Zelle " & _
    "eingerichtet werden !", vbCritical, "Fehler:"
  Exit Sub
End If

' Falls Autofilter gesetzt, Filter löschen; falls nicht
' gesetzt, Filter einrichten:
ActiveCell.AutoFilter

End Sub

Hinweis Der Versuch, einen Autofilter auf einer anderen Blattart als "Worksheet" einzurichten, führt ebenso zu einer Fehlermeldung wie der Versuch, einen Autofilter einzurichten, während der Cursor in einer leeren Tabellenzelle steht.

Hinweis Es gibt keine Möglichkeit, mit VBA-Code die Filterbegriffe eines gesetzten Autofilters zu erfragen.

Die Eigenschaft "AutoFilterMode"

Diese Eigenschaft hat den Wert "True", wenn die Dropdown-Pfeile momentan angezeigt werden. Sie können diese Eigenschaft auf "False" setzen, um die Pfeile zu entfernen, jedoch nicht auf "True", um sie einzublenden. Verwenden Sie hierzu die "AutoFilter"-Methode.

Die Eigenschaft "FilterMode"

Sie kann nur befragt werden. Setzen kann man sie nicht. "FilterMode" ergibt "True", falls es 1.) auf dem Blatt einen Autofilter gibt und dieser 2.) gefilterte Zeilen enthält. Man kann diese Eigenschaft nur für einen Zweck verwenden: Zu prüfen, ob es einen Sinn macht, per Code anzuordnen, daß wieder alle Zeilen der gefilterten Liste gezeigt werden sollen. Wird das nämlich angeordnet, ohne daß es gefilterte Zeilen gibt, reagiert EXCEL mit einer Fehlermeldung.

Sub AlleDatenZeigen()

If TypeName(ActiveSheet) <> "Worksheet" Then
  Beep
ElseIf ActiveSheet.FilterMode = False Then
  Beep
Else
  ActiveSheet.ShowAllData
End If

End Sub

Daten filtern

Verwenden Sie dazu die "Autofilter"-Methode in folgender Syntax:

<Tabellenbereich>.AutoFilter(field, criteria1, operator, criteria2)

field die fortlaufende Nummer der zu filternden Spalte im Autofilter-Bereich.

criteria1 ein Filterbegriff, z.B. "=Müller"

operator "xlAnd" oder "xlOr" für Verknüpfung mit "criteria2"; "xlTop10Items" gibt jene Anzahl an Datenzeilen zurück, die in "criteria1" mit einer Zahl angegeben werden. Zum Beispiel: "10":

Sub Makro2()
  Selection.AutoFilter Field:=1, Criteria1:="10", Operator:= _
    xlTop10Items
End Sub

criteria2 zweiter Filterbegriff, z.B. "=Huber"

Hinweis Beachten Sie, daß zusätzlich zu den Filterbegriffen auch die Vergleichs-Operatoren in einer Zeichenkette an die "Autofilter"-Methode übergeben werden müssen.

&QUOTAUTOFILTER&QUOT-VERGLEICHSOPERATOREN

Alle Operatoren können auf Texte, Datum und Zahlen angewendet werden. Die Umlaute werden bei deutscher Ländereinstellung von Windows korrekt behandelt. Groß- und Kleinschreibung sind gleichgesetzt.

Vergleichs-Operator bewirkt Beispiel
= Es werden nur jene Datenzeilen gezeigt, in denen in der Spalte "field" der Filterbegriff komplett enthalten ist =Huber
=123,12
=01.04.96
> Es werden nur jene Datenzeilen gezeigt, deren Wert in der Spalte "field" größer ist als im Filterbegriff angegeben.
>123,12
>Hofer
< Es werden nur jene Datenzeilen gezeigt, deren Wert in der Spalte "field" kleiner ist als im Filterbegriff angegeben.
<01.04.1996
<123,12
<Österreich
>= Es werden nur jene Datenzeilen gezeigt, deren Wert in der Spalte "field" größer ist als im Filterbegriff angegeben. >=01.01.96
>=123,12
>=Österreich
<= Es werden nur jene Datenzeilen gezeigt, deren Wert in der Spalte "field" kleiner ist als im Filterbegriff angegeben. <=01.01.96
<=123,12
<=Österreich
<> Es werden nur jene Datenzeilen gezeigt, deren Wert in der Spalte "field" nicht dem im Filterbegriff angegebenen Wert entspricht. <>01.01.96
<>123,12
<>Österreich

Hinweis Beachten Sie, daß zusätzlich zu den Filterbegriffen auch die Vergleichs-Operatoren in der Zeichenkette mit dem Filterbegriff an die "Autofilter"-Methode übergeben werden müssen:

Sheets("Tabelle1").Cells(1, 1).AutoFilter _
  field:=1, _
  criteria1:=">Huber"

Autofilter löschen Wollen Sie den Filter über eine Datenspalte löschen, dann müssen Sie die "Autofilter"-Methode "leer" aufrufen:

ActiveSheet.Cells(1, 1).AutoFilter _
    field:=NAMENFELD

AUSPROGRAMMIERTES BEISPIEL

Um die Funktionalität und die Unzulänglichkeiten des "Autofilters" zu zeigen, verwenden wir eine dreispaltige Liste:

Liste und Dialogfeld für das Filtern sehen so aus:

Laden Den kompletten Code dieses Beispiels finden Sie in der Datei "Autofilt.xls".
Datum und Zahlen-zwei knifflige Probleme

Wollen wir ein Datum filtern und ordnen im VBA-Code an, daß der deutsche Datumstext (z.B. "03.07.96" als Filterbegriff verwendet werden soll, wird die gesamte Liste ausgefiltert. EXCEL erwartet offensichtlich, daß das Datum im Format der VBA-Standardsprache, Englisch/USA, zur Verfügung gestellt wird. In unserem Fall: "07/03/96". Leider nützt es auch nichts, im Eingabefeld einer Dialogbox dieses Datumsformat anzuwenden. Bevor VBA und EXCEL es als Filterbegriff verwenden, wird es automatisch in ein "deutsches" Datum umgewandelt. Die einzige Abhilfe, die ich derzeit sehe, besteht im Anfertigen einer Zeichenkette, die das US-Datumsformat enthält. Für die Mitteilung besserer Wege bin ich dankbar.

Function SystemDatumFormat(sDasDatum As String)
SystemDatumFormat = Month(sDasDatum) & "/" _
  & Day(sDasDatum) & "/" & Year(sDasDatum)

End Function

Bei Zahlen-Eingabe führt das im Deutschen übliche Dezimal-Komma dazu, daß die gesuchte Zahl nicht gefunden und die ganze Liste ausgefiltert wird. Die Eingabe eines Dezimalpunktes löst das Problem nur für den Wissenden. Besser ist es, im VBA-Code den Punkt gegen das Komma so zu tauschen:

Function SystemFormatZahl(sDieZahl As String)

SystemFormatZahl = Application.Substitute(sDieZahl, ",", ".")

End Function

TEXTE MIT WILDCARDS FILTERN

Datum und Zahlen können nur komplett gesucht werden, bei Texten können "?" und "*" verwendet werden, um Zeilen herauszufiltern, deren Text dem eingegebenen Filterbegriff nur teilweise entspricht:

"Hu*" findet zum Beispiel jeden Text, der mit den Buchstaben "Hu" beginnt, "*Hu*" findet "Hu" (auch kleingeschrieben) an jeder Stelle in einem Text. "Hu?" findet jeden Text, der mit "Hu" beginnt und dann noch einen dritten Buchstaben hat.
vorheriges Kapitel Inhalt Hilfe Beispiele laden nächstes Kapitel

------------

Copyright © by JOANNEUM RESEARCH Forschungsgesellschaft mbH